// pages/flask/flask.js
Page({
  data: {
      title: '病虫害识别',
      videoUrl: '', // 初始为空
      bgPic: null,          // 存储视频/图片路径
      detections: [],       // 存储检测结果（数组）
      selectedDetection: null, // 当前选中的检测结果
      showResult: false,    // 是否显示结果面板
      isLoading: false,      // 是否正在加载
      processedDetections: [], // 新增字段，用于存储处理后的数据
      processingTime: 0,    // 新增字段，用于存储处理时间
      frameCount: 0         // 新增字段，用于存储帧数量
  },
  useCamera: function () {
      // 更新 videoUrl 为硬件摄像头的视频流地址
      this.setData({
          videoUrl: getApp().globalData.videoUrl
      });
  },
  chooseFromAlbum: function () {
      wx.chooseVideo({
          sourceType: ['album'],
          maxDuration: 60,
          camera: 'back',
          compressed: true,
          success: (res) => {
              this.setData({
                  bgPic: res.tempFilePath,
                  videoUrl: res.tempFilePath // 更新视频框显示选择的视频
              });
          },
          fail: (err) => {
              console.error('选择视频失败:', err);
          }
      });
  },
  /** 开始识别 */
  BeginReg: function () {
      if (!this.data.bgPic) {
          wx.showToast({ title: '请先选择视频', icon: 'none' });
          return;
      }

      this.setData({ isLoading: true });
      wx.showLoading({ title: '分析中...', mask: true });

      wx.uploadFile({
          url: 'http://127.0.0.1:5000/detect',
          filePath: this.data.bgPic,
          name: 'video',
          formData: {
              'type': 'file'
          },
          header: { 'content-type': 'multipart/form-data' },
          success: (res) => {
              wx.hideLoading();
              if (res.statusCode === 200) {
                  const result = JSON.parse(res.data);
                  if (result.status === 'success') {
                      this.setData({
                          processingTime: result.processing_time,
                          frameCount: result.frame_count
                      });
                      this.processDetections(result.detections);
                      this.setData({
                          showResult: true,                     // 显示结果面板
                          resultText: "这里是识别结果"
                      });
                  } else {
                      wx.showModal({ title: '错误', content: result.error });
                  }
              } else {
                  wx.showModal({ title: '错误', content: '服务器返回异常' });
              }
          },
          fail: (err) => {
              wx.hideLoading();
              wx.showModal({ title: '上传失败', content: '请检查网络或服务器' });
              console.error('上传失败:', err);
          },
          complete: () => {
              this.setData({ isLoading: false });
          }
      });
  },

  /** 处理检测结果 */
  processDetections: function (result) {
      const processedDetections = result.map(frame => {
          return {
              frame: frame.frame,
              time: frame.time,
              detections: frame.detections.map(detection => {
                  return {
                      class: detection.class,
                      class_name: detection.class_name,
                      confidence: (detection.confidence * 100).toFixed(1) + '%', // 转换为百分比格式
                      bbox: detection.bbox.map(coord => coord.toFixed(1)) // 坐标保留一位小数
                  };
              })
          };
      });
      this.setData({
          detections: processedDetections,
          processedDetections: processedDetections // 存储处理后的数据到页面data中
      });
  },

  /** 更新选择状态 */
  assignPicchoosed() {
      this.setData({ picchoosed: !!this.data.bgPic });
  },

  /** 点击某个检测结果 */
  selectDetection(e) {
      const index = e.currentTarget.dataset.index;
      this.setData({
          selectedDetection: this.data.processedDetections[index]
      });
  }
});

App({
  globalData: {
      videoUrl: 'http://192.168.35.219:8080/stream' // 确保这个地址是硬件摄像头的视频流地址
  }
})